home *** CD-ROM | disk | FTP | other *** search
/ The X-Philes (2nd Revision) / The X-Philes Number 1 (1995).iso / xphiles / hp48_2 / areuh.tar / areuh / assembler / areport.c < prev    next >
C/C++ Source or Header  |  1990-10-10  |  7KB  |  230 lines

  1. /*
  2.  * Authors :
  3.  *   Pierre DAVID (pda@masi.ibp.fr or pda@frunip62.bitnet)
  4.  *   Janick TAILLANDIER
  5.  *
  6.  * This program can be freely used or distributed as long as this
  7.  * note is kept.
  8.  *
  9.  * This program is provided "as is".
  10.  */
  11.  
  12. /******************************************************************************
  13.  
  14.                                 AREUH ASSEMBLER
  15.  
  16.                             END OF ASSEMBLY REPORT
  17.  
  18.  
  19.  
  20. print_ref, print_status, print_label, print_xref
  21.  
  22. ******************************************************************************/
  23.  
  24. #include "aglobal.h"
  25.  
  26. extern void l_print (), l_new_page () ;
  27.  
  28. uchar format [15], formateq [16], xformat [MAXLEN], xf[15] ;
  29.  
  30. void print_status (), print_label (), print_xref () ;
  31.  
  32. /******************************************************************************
  33.  
  34.                                    PRINT_REF
  35.  
  36. synopsis : void print_ref () 
  37. description : at the end of assembly (end of second pass), programmer want some
  38.   informations on the program. This includes :
  39.   - list of labels with their value, and cross reference
  40.   - error count
  41.   - time and date
  42.   - that's all folks
  43.  
  44. ******************************************************************************/
  45.  
  46. void print_ref ()
  47. {
  48.     sprintf (format, " %%-%ds %%s", LBLLEN) ;
  49.     sprintf (formateq, "%%-%ds %%s", LBLLEN+1) ;
  50.     sprintf (xf, "%%%ds+ ", LBLLEN+18) ;
  51.     sprintf (xformat, xf, "") ;
  52.  
  53.     if ((cntlist) || (xref))
  54.         print_label() ;
  55.  
  56.     if (cntlist) print_status() ;
  57.     else
  58.     {
  59.         if (errcnt)
  60.             printf ("aas: %d errors in file %s\n", errcnt, fsource) ;
  61.     }
  62. }
  63.  
  64.  
  65. /******************************************************************************
  66.  
  67.                                  PRINT_STATUS
  68.  
  69.  
  70. synopsis : void print_status ()
  71. description : reports some status lines after the assembly
  72.  
  73. ******************************************************************************/
  74.  
  75. void print_status()
  76. {
  77.     uchar line[MAXLEN+1], tmp[MAXLEN+1] ;
  78.  
  79.     l_print (0L, "", "", F_TL) ;
  80.     l_print (0L, "", "", F_TL) ;
  81.     l_print (0L, "", "", F_TL) ;
  82.     l_print (0L, "", "", F_TL) ;
  83.     l_print (0L, "", "", F_TL) ;
  84.     l_print (0L, "", "", F_TL) ;
  85.  
  86.     sprintf (line, "Source  : %s", fsource) ;
  87.     l_print (0L, "", line, F_TL) ;
  88.     l_print (0L, "", "", F_TL) ;
  89.  
  90.     sprintf (line, "Object  : %s", fobject) ;
  91.     l_print (0L, "", line, F_TL) ;
  92.     l_print (0L, "", "", F_TL) ;
  93.  
  94.     strcpy (line, "Listing : ") ;
  95.     if (cntlist == 1) strcat (line, "stdout") ;
  96.     else strcat (line, flisting) ;
  97.     l_print (0L, "", line, F_TL) ;
  98.     l_print (0L, "", "", F_TL) ;
  99.  
  100.     format_time (tmp) ;
  101.     sprintf (line, "Date    : %s", tmp) ;
  102.     l_print (0L, "", line, F_TL) ;
  103.     l_print (0L, "", "", F_TL) ;
  104.  
  105.     sprintf (line, "Errors  : %03d", errcnt) ;
  106.     l_print (0L, "", line, F_TL) ;
  107.     l_print (0L, "", "", F_TL) ;
  108.  
  109.     l_print (0L, "", "", F_TL) ;
  110.     l_print (0L, "", "", F_TL) ;
  111.     l_print (0L, "", "Areuh Assembler/Linker V2.4, (c) P. David & J. Taillandier 1986 Paris, France", F_TL) ;
  112. }
  113.  
  114.  
  115. /******************************************************************************
  116.  
  117.                                   PRINT_LABEL
  118.  
  119. synopsis : void print_label()
  120. description : prints a complete list of labels encoutered in the assembly.
  121.  
  122. ******************************************************************************/
  123.  
  124. void print_label ()
  125. {
  126.     struct symbol *t ;
  127.     struct xtable *x ;
  128.     uchar line[MAXLEN+1], tmp[MAXLEN+1] ;
  129.     int i ;
  130.  
  131.     strcpy (l_stitle, "**** SYMBOL TABLE ****") ;
  132.     l_new_page (1) ;
  133.  
  134.     for (i=0; i<256; i++)
  135.     {
  136.         t = h_label[i]->s_next ;
  137.         while (t)
  138.         {
  139.             if (!t->s_os)
  140.             {
  141.                 if (t->s_value >= (saddr) 0)
  142.                 {
  143.                         hex5 (tmp, t->s_value) ;
  144.                 }
  145.                 else if (t->s_value == LBL_UDF)
  146.                 {
  147.                         strcpy (tmp, "Undef") ;
  148.                 }
  149.                 else if (t->s_value == LBL_EXT)
  150.                 {
  151.                         strcpy (tmp, "Extrn") ;
  152.                 }
  153.                 else /* (t->s_value == LBL_SEQ) || (t->s_value == LBL_XEQ) */
  154.                 {
  155.                         strcpy (tmp, "Unkwn") ;
  156.                 }
  157.  
  158.                 if (*(t->s_name)=='=')
  159.                      sprintf (line, formateq, t->s_name, tmp) ;
  160.                 else sprintf (line, format, t->s_name, tmp) ;
  161.                 if (xref)
  162.                 {
  163.                     switch (t->s_type)
  164.                     {
  165.                         case LUDF : strcat (line, " Ukn") ; break ;
  166.                         case LABS : strcat (line, " Abs") ; break ;
  167.                         case LREL : strcat (line, " Rel") ; break ;
  168.                     }
  169.                     if ((t->s_value!=LBL_UDF)&&(t->s_value!=LBL_EXT))
  170.                         sprintf (tmp, "%s  %04d - ", line, t->s_decl) ;
  171.                     else sprintf (tmp, "%s       - ", line, t->s_decl) ;
  172.                     x = t->s_xref ;
  173.                     if (x)
  174.                     {
  175.                         while (x->x_next)  x = x->x_next ;
  176.                         print_xref (x, tmp) ;
  177.                     }
  178.                     else
  179.                     {
  180.                         if (cntlist) l_print (0L, "", tmp, F_TL) ;
  181.                         else printf ("%s\n", tmp) ;
  182.                     }
  183.                 }
  184.                 else l_print (0L, "", line, F_TL) ;
  185.             } /* if not (O.S. entry point not used) */
  186.             t = t->s_next ;
  187.         } /* while */
  188.     } /* for */
  189. }
  190.  
  191.  
  192. /******************************************************************************
  193.  
  194.                                    PRINT_XREF
  195.  
  196.  
  197. synopsis : void print_xref (x, line)
  198.            struct xtable *x
  199.            uchar *line
  200. description : prints the complete cross-reference list backward from the end.
  201.               x is the end of xref list, line is the line to be printed first.
  202.  
  203. ******************************************************************************/
  204.  
  205. void print_xref (x, line)
  206. struct xtable *x ;
  207. uchar *line ;
  208. {
  209.     int col = LBLLEN+21 ;        /* column number */
  210.     uchar tmp[MAXLEN+1], strnum[MAXLEN+1] ;
  211.  
  212.     strcpy (tmp, line) ;
  213.     while (x)
  214.     {
  215.         if (col>75) 
  216.         {
  217.             if (cntlist) l_print (0L, "", tmp, F_TL) ;
  218.             else printf ("%s\n", tmp) ;
  219.             col = LBLLEN+21 ;
  220.             strcpy (tmp, xformat) ;
  221.         }
  222.         sprintf (strnum, " %04d", x->x_line) ;
  223.         strcat (tmp, strnum) ;
  224.         col += 5 ;
  225.         x = x->x_prev ;
  226.     }
  227.     if (cntlist) l_print (0L, "", tmp, F_TL) ;
  228.     else printf ("%s\n", tmp) ;
  229. }
  230.